白話說SVM就是在特徵空間中找到一個超平面,這個超平面可以把不同類別的數據分開得最遠~~
SVC(Support Vector Classification):用於分類問題的 SVM
SVR(Support Vector Regression):用於回歸問題的 SVM
NuSVC:支持 nu 參數的分類器
NuSVR:支持 nu 參數的回歸器
主要參數:
C:正則化參數,控制了模型的覆雜度,較小的 C 會導致模型較大的間隔,但可能會出現分類錯誤
kernel:核函數,可以是線性核、多項式核、RBF(高斯徑向基)核等
degree:多項式核的階數
gamma:RBF 核的參數,控制了單個樣本對模型的影響程度
coef0:核函數中的獨立項
probability:是否啟用概率估計
from sklearn.datasets import make_circles
import matplotlib.pyplot as plt
# 生成圓環數據集
X, y = make_circles(n_samples=100, noise=0.1, factor=0.3, random_state=42)
# 初始化 SVM 模型(使用高斯 RBF 核函數)
svm = SVC(kernel='rbf', C=1.0)
# 在訓練集上訓練模型
svm.fit(X, y)
# 繪製決策邊界
plt.scatter(X[:, 0], X[:, 1], c=y, cmap='viridis')
plot_decision_boundary(svm, X)
plt.xlabel('特徵 1')
plt.ylabel('特徵 2')
plt.title('非線性 SVM 分類')
plt.show()
from sklearn.datasets import load_boston
from sklearn.svm import SVR
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
# 載入波士頓房價數據集
boston = load_boston()
X, y = boston.data, boston.target
# 特徵標準化
scaler = StandardScaler()
X = scaler.fit_transform(X)
# 將數據集劃分為訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 初始化 SVR 模型
svr = SVR(kernel='linear', C=1.0)
# 在訓練集上訓練模型
svr.fit(X_train, y_train)
# 在測試集上進行預測
y_pred = svr.predict(X_test)
# 計算均方誤差
mse = mean_squared_error(y_test, y_pred)
print(f'均方誤差:{mse}')